<?php
/**
 * Connection - Conex�o e execu��o de instru��es no banco de dados
 * @package reports
 * @author Thiago Segato Antunes
 * @version 1.0
 * @copyright atitudeweb
 * @license http://opensource.org/licenses/gpl-3.0.html GPL General Public License
 */
class PHPIreport {
	private $config;
	private $params;
	private $relName;
	private $popup;

	/**
	 * Inicializa com a configura��o default para o relat�rio, realiza a verifica��o do plugin java
	 *
	 * @param string $reportName - Nome do relatorio.jasper
	 * @param string $relName - Nome do relat�rio a fazer download
	 * @param array $params - Par�metros do relat�rio
	 * @param boolean $popup - true para popup e false para download
	 * @return boolean
	 */
	public function PHPIreport($reportName=null, $relName='relatorio', $params=array(), $popup=false){
		if(!file_exists('php.jar')){
			echo 'N�o foi poss�vel encontrar plugin java do gerador de relat�rios!';
			exit;
		}
		$this->config = array();
		$this->config['con']['driver'] = Config::DEFAULT_CONNECTION;
		$this->config['con']['host'] = Config::POSTGRES_HOST;
		$this->config['con']['port'] = Config::POSTGRES_PORT;
		$this->config['con']['base'] = Config::POSTGRES_NAME;
		$this->config['con']['user'] = Config::POSTGRES_USER;
		$this->config['con']['pass'] = Config::POSTGRES_PASS;
		$this->setReportName($reportName);
		$this->params = array();
		$this->setParams($params);
		$this->relName = $relName;
		$this->popup = $popup;
	}

	/**
	 * Define o nome do relat�rio a fazer download
	 *
	 * @param string $value - Nome do realt�rio a fazer download
	 * @return void
	 */
	public function setRelName($value){
		$this->relName = $value;
	}

	/**
	 * Adquire o nome do relat�rio
	 *
	 * @return string
	 */
	public function getRelName(){
		return $this->relName;
	}

	/**
	 * Define os par�metros do relat�rio
	 *
	 * @param array $params - Par�metros do relat�rio
	 * @return void
	 */
	public function setParams($params){
		if(is_array($params)){
			$this->params = array();
			foreach($params as $key=>$value){
				$this->params[$key] = base64_encode($value);
			}
		}
	}

	/**
	 * Adquire o nome do relat�rio
	 *
	 * @return string
	 */
	public function getParams(){
		return $this->$params;
	}

	/**
	 * Define a conex�o com banco de dados
	 *
	 * @param string $host - Host do servidor
	 * @param string $base - Nome do banco de dados
	 * @param string $user - Usu�rio do banco de dados
	 * @param string $pass - Senha do banco de dados
	 * @param string $driver - Driver de conex�o
	 * @param string $port - Porta do host do servidor
	 * @return void
	 */
	public function setConnection($host='127.0.0.1', $base='atitudeweb', $user='postgres', $pass='123456789', $driver='postgres', $port=5432){
		$this->config['con']['driver'] = $driver;
		$this->config['con']['host'] = $host;
		$this->config['con']['port'] = $port;
		$this->config['con']['base'] = $base;
		$this->config['con']['user'] = $user;
		$this->config['con']['pass'] = $pass;
	}

	/**
	 * Adquire a configura��o da conex�o com o banco de dados
	 *
	 * @return array
	 */
	public function getConnection(){
		return $this->config['con'];
	}
	/**
	 * Define o nome do relat�rio jasper
	 *
	 * @param string $value - Nome do relat�rio jasper
	 * @return void
	 */
	public function setReportName($value='report1.jasper'){
		$this->config['rel'] = $value;
	}

	/**
	 * Adquire o nome do relat�rio jasper
	 *
	 * @return string
	 */
	public function getReportName(){
		return $this->config['rel'];
	}
	/**
	 * Gera o relat�rio
	 *
	 * @param boolean $debug - Impress�o do comando executado
	 * @return void
	 */
	public function make($debug=false){

		$arguments = array();
		$arguments['config'] = $this->config;
		$arguments['params'] = $this->params;
		$str = json_encode($arguments);
		$str = addslashes($str);

		if($debug){
			echo "<pre>"; print_r($arguments); echo "<br><br>Command:<br>".$str."</pre>";
			exit;
		}

		//Para verificar errro utilize desta forma
		//$ret = `java -jar php.jar "$str" 2>&1`;
		//echo $ret; exit;

		$ret = `java -jar php.jar "$str"`;

		header('Content-Type: application/pdf');
		if($this->popup){
			header('Content-Disposition: inline; filename="'.$this->relName.'.pdf"');
		}
		else{
			header('Content-Disposition: attachment; filename="'.$this->relName.'.pdf"');
		}
		header('Pragma: no-cache');
		echo base64_decode($ret);
		exit;
	}

	/**
	 * Gera um relat�rio ireport
	 *
	 * @param string $reportName - Nome do arquivo jasper
	 * @param string $relName - Nome do download em pdf
	 * @param array $params - Parametros do relat�rio
	 * @param boolean $popup - Abrir em popup ou fazer download do relat�rio
	 * @return string
	 * @author Evandir
	 */
	public static function show($reportName, $relName, $params=array(), $popup=false){
		$hash = serialize($params);
		$hash = base64_encode($hash);
		echo '
		<script type="text/javascript">
			var janela = window.open("reports/?reportName='.$reportName.'&relName='.$relName.'&popup='.$popup.'&hash='.$hash.'", "_blank", "dependent=yes, menubar=no, toolbar=no, location=no, status=no, scrollbars=yes, resizable=yes");
			janela.focus();
		</script>
		';				
	}
}
?>